package org.zjt.book

/**
  * DESC    
  * par 并行执行
  * @author
  * @create 2017-05-04 下午3:45
  **/
object ParallelTest extends App{

  val sum = Array(1,2,3,4,39,1,1,1).par.sum
  println(sum)


  var (x,y) = BigInt(23) /% 2
  println(x+y)


  var array = Array(1,2,3,4,39,1,1,1)
  println(array.par.count( _ > 2))


  array.par.foreach(print(_))


  //并行输出 1到10 的无序序列
  for ( i <- (1 until 10).par ) println(i+" ")


  // num 对于线程是不透明，所以num数值不一定，多线程运行
  var num = 0
  for ( i <- (1 until 10).par ) num += 1

  println("num ="+ num)



  //不能实现多线程相加，num1线程可见的，但不是原子性操作的。
  @volatile var num1 = 0
  for ( i <- (1 until 10).par ) num1 += 1

  println("num1 ="+ num1)


  /** 并行yield不会影响顺序和元素个数（yield是同步原子操作的）*/
  var array2 = for ( i <- (1 until 10).par ) yield i
  println(array2.mkString(","))

}
